package message;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;

import serveur.MainServer;

public class MessageChooseFolder extends Message {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final Logger logger = Logger.getLogger(MainServer.class.getName());
	String m_sFolder;

	public MessageChooseFolder (String sFolder)
	{
		m_iMessageId = Message.ChooseFolderId;
		m_sMessageName = Message.sChooseFolderName;
		m_sFolder = sFolder;
	}
	
	@Override
	public boolean execute() {
		// TODO Remonter les if de choix de commande ".." pour specifier les 2 choix possibles ensuite
		boolean bRet = false;
		// Test la direction du changement de repertoire
		if(m_sFolder.equals("..")){
			// Se deplace dans le repertoire parent
			String[] tmpPath = m_sCurrentFolder.split(File.separator);
			// TEST A ENLEVER
			for (int i=0;i<tmpPath.length;i++){
				System.out.print(tmpPath[i]+"\t");
			}
			System.out.print("\n");
			
			// Se deplace dans le repertoire parent sauf si on est a la racine de l'arborescence utilisateur
			// Si la fin du chemin n'est pas le nom d'utilisateur (on est à la racine : on ne change pas de rep)
			String tmpStr = "";
			if (!tmpPath[tmpPath.length-1].equals(m_sUserName)){
				for (int i=0;i<tmpPath.length-1;i++){
					tmpStr += tmpPath[i] + File.separator;
				}
				m_sCurrentFolder = tmpStr;
				m_sResultatExecution ="Execution réussie : changement de repertoire vers repertoire parent = "+m_sCurrentFolder;
				m_bResultatExecution = true;
				logger.log(Level.INFO, "Execution de la commande CD : Repertoire courant "+m_sCurrentFolder);
				bRet = true;
			} else {
				// on change pas le repertoire courant
				logger.log(Level.INFO, "CD FAILED - Vous êtes à la racine");
				m_sResultatExecution ="Execution réussie : Repertoire racine - abandon commande CD";
			}
		} else {
			String tmpPath = m_sCurrentFolder + File.separator + m_sFolder;
			File folder = new File(tmpPath);
		
			// Test si le nom de repertoire demande existe
			if (folder.exists()) {
				// Test si le nom de repertoire demande est un repertoire 
				if (folder.isDirectory()){
					// Change le repertoire courant
					m_sCurrentFolder = tmpPath;	
					m_sResultatExecution ="Execution réussie : changement de repertoire = "+m_sCurrentFolder;
					m_bResultatExecution = true;
					logger.log(Level.INFO, "Execution de la commande CD : Repertoire courant "+m_sCurrentFolder);
					bRet = true;
				} else {
					logger.log(Level.WARNING, "CD FAILED - Le nom demande n'est pas un repertoire");
					m_sResultatExecution ="Execution réussie : la commande a echouee";
				}			
			} else {
				logger.log(Level.WARNING, "CD FAILED - Le nom de repertoire demande est inconnu");
				m_sResultatExecution ="Execution réussie : la commande a echouee";
			}
		}
		return bRet;
	}
}
